package com.gxuwz.attend.dao;
import com.gxuwz.attend.entity.User;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 管理员信息Dao
 * 访问用户数据DAO类，封装访问数据表常用的CRUD方法
 */
public class UserDao {
    /**
     * （1）成员变量：基本数据类型，引用数据类型
     *      使用setter注入xml配置
     *      xml中如果是基本数据类型使用value,如果是引用型，用ref
     * （2）使用jdbcTemplate访问数据库，在配置声明式管理后
     *      就不需要开发者手动关闭数据库连接资源，由Spring自动管理
     */
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    /**
     * 查询全部数据
     */
    public List<User> getUsers() {
        String sql = "select * from sys_user ";
        List<Object> paramValues=new ArrayList<>();
        List<User> userList=new ArrayList<>();
        userList = jdbcTemplate.query(sql, paramValues.toArray(), new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                String userid= resultSet.getString("userid");
                String fullname=resultSet.getString("fullname");
                String password=resultSet.getString("password");
                String telephone=resultSet.getString("telephone");
                user.setFullname(fullname);
                user.setUserid(userid);
                user.setTelephone(telephone);
                user.setPassword(password);
                return user;
            }
        });
        return userList;
    }
    /**
     * 添加用户数据
     * @param user
     */
    public void insert(User user){
        //生命式插入SQL字符串变量sql
        String sql = "insert into sys_user(userid,fullname,password,telephone)values(?,?,?,?)";
        if (user != null && user.getUserid() != null){
            jdbcTemplate.update(sql,user.getUserid(),user.getFullname(),user.getPassword(),user.getTelephone());
        }
    }

    /**
     * 删除用户数据
     * @param id
     */
    public void delete(String id){
        String sql="delete from sys_user where userid=?";
        jdbcTemplate.update(sql,id);
    }


    /**
     * 更新用户数据
     * @param user
     */
    public void update(User user){
        //生命式插入SQL字符串变量sql
        String sql = "update sys_user set fullname=?,password=?,telephone=? where userid=?";
        if (user != null){
            jdbcTemplate.update(sql,user.getFullname(),user.getPassword(),user.getTelephone(),user.getUserid());
        }
    }

    /**
     * 模糊查询用户数据
     * @param entity
     * @return
     */
    public List<User> query(User entity){
        String sql = "select * from sys_user where 1=1";
        List<Object> paramValues=new ArrayList<>();
        List<User> userList=new ArrayList<>();
        if (entity!=null){
            if (entity.getUserid()!=null&&!"".equals(entity.getUserid().trim())){
                sql+=" and userid=?";
                paramValues.add(entity.getUserid());

            }
            if (entity.getPassword()!=null&&!"".equals(entity.getPassword().trim())){
                sql+=" and password=?";
                paramValues.add(entity.getPassword());

            }
            if (entity.getTelephone()!=null&&!"".equals(entity.getTelephone().trim())){
                sql+=" and telephone=?";
                paramValues.add(entity.getTelephone());

            }
            if (entity.getFullname()!=null&&!"".equals(entity.getFullname().trim())){
                sql+=" and fullname like ?";
                paramValues.add(entity.getFullname()+"%");
            }
        }
        userList = jdbcTemplate.query(sql, paramValues.toArray(), new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                String userid= resultSet.getString("userid");
                String fullname=resultSet.getString("fullname");
                String password=resultSet.getString("password");
                String telephone=resultSet.getString("telephone");
                user.setFullname(fullname);
                user.setUserid(userid);
                user.setTelephone(telephone);
                user.setPassword(password);
                return user;
            }
        });
        return userList;
    }

}
